<?php
class Admin_Form_TripCreateMultipleCont extends TBB_Form
{
	public function init()
	{
		// set attributes for main form
		$this->addAttribs(array(
			'class' => 'span-14',
		));
		
		// set decorators for form
		$this->setDecorators($this->_formDecorators);
		$this->setDisplayGroupDecorators($this->_displayGroupDecorators);		
	}
	
	// add trip line; each trip line includes: bus, departure time, arrival time and fare.
	public function addTripLines($tripCount = 1, $startDate, $buses = array())
	{		
		// create subform
		$tripLinePanel = new Zend_Form_SubForm();
		$tripLinePanel->setDecorators($this->_displayGroupDecorators)
					  ->addAttribs(array('class' => 'fieldsetForm span-8'));
		
		for($i = 1; $i <= $tripCount; ++$i)	{
			// create bus element			
			$bus = $this->_createBusElement($buses);
			
			// create departure time element
			$departureTime = $this->_createElement('text', 'departureTime', 'Ngày giờ đi', 'Làm ơn nhập ngày giờ đi', true);
			$departureTime->setValue($startDate . ' 00:00:00');
			$departureTime->addValidator(new TBB_Validate_DepartureTime($startDate));
				
			// create arrival time element
			$arrivalTime = $this->_createElement('text', 'arrivalTime', 'Ngày giờ đến', 'Làm ơn nhập ngày giờ đến', true);
			$arrivalTime->setValue($startDate . ' 00:00:00');
			$arrivalTime->addValidator(new TBB_Validate_ArrivalTime());
			$fare = $this->_createElement('text', 'fare', 'Giá vé', 'Làm ơn nhập giá vé', false, true);
								
			// create trip line
			$tripLine = new Zend_Form_SubForm();			
			$tripLine->setDecorators($this->_displayGroupDecorators)
					 ->addAttribs(array('class' => 'span-7'))
					 ->setLegend('Chuyến #' . $i);

			// add elements to the tripline
			$tripLine->addElements(array($bus, $departureTime, $arrivalTime, $fare));
			
			$tripLinePanel->addSubForm($tripLine, $i);		
		}
		// add submit button
		$submit = $this->_createSubmitButton();
		$tripLinePanel->addElement($submit);

		$this->addSubForm($tripLinePanel, 'tripLines');
	}
	
	private function _createSubmitButton()
	{
		$submit = $this->createElement ( 'submit', 'submit' )
					   ->setLabel ( 'Chấp nhận' )
					   ->setDecorators($this->_submitDecorators);
		$submit->setAttribs(array(
			'class' => 'span-4',
			'style' => 'margin-left: 5em'
		));
		return $submit;
	}
	
	// create bus element
	private function _createBusElement($buses)
	{		
		$element = $this->createElement('select', 'bus')
							  ->setLabel('Mã số xe')
							  ->setRequired(true)
							  ->setMultiOptions($buses)	
							  ->setAttribs(array('class' => 'span-6'));					  							  		
		$element->getDecorator('Label')->setOption('class', 'span-4 labelDecorator');		
		$element->getDecorator('Errors')->setOption('class', 'span-6 errorDecorator');	
		return $element;
	}
	
	// create text and datetime element
	private function _createElement($type, $name, $labelText, $notEmptyMessage, $useDatetimeValidator = false, $useIntValidator = false)
	{
		$notEmptyValidator = $this->_createNotEmptyValidator($notEmptyMessage);
		$element = $this->createElement($type, $name)
							  ->setLabel($labelText)
							  ->setRequired(true)		
							  ->setAttribs(array('class' => 'span-6'))							  							  
							  ->setValidators(array(array($notEmptyValidator, true)));
		$element->getDecorator('Label')->setOption('class', 'span-4 labelDecorator');		
		$element->getDecorator('Errors')->setOption('class', 'span-6 errorDecorator');	
		
		// add datetime validator
		if($useDatetimeValidator) {
			$datetimeValidator = $this->_createDatetimeValidator('Ngày giờ không hợp lệ. Ngày giờ phải có dạng dd:MM:yyyy HH:mm:ss');			
			$element->addValidator($datetimeValidator, true);
//			$element->setValue(TBB_Utility_Date::formatDateTime(TBB_Utility_Date::getCurrentDate()));
		}
		// add int validator
		if($useIntValidator) {
			$intValidator = $this->_createIntValidator('Giá vé không hợp lệ. Giá vé phải là số');
			$element->addValidator($intValidator, true);
			$element->setValue(999);
		}
		return $element;
	}

}